#include "pe4302.h"
#include <math.h>

static void io_init (void) {
    GPIO_InitTypeDef init;
    init.GPIO_Pin = DATA_PIN | CLK_PIN;
    init.GPIO_Mode = GPIO_Mode_Out_PP;
    init.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init (PE4302Port, &init);
    init.GPIO_Pin = LE1_PIN;
    GPIO_Init (LE1_PORT, &init);
    init.GPIO_Pin = LE2_PIN;
    GPIO_Init (LE2_PORT, &init);
}

void pe4302Init (void) {
    io_init();
    LE1 (0);
    LE2 (0);
    CLK (0);
}

void SetAttenuation (uint8_t db, uint8_t idx) {
    u8 mask = 0x20;
    Delay_Us (1);
    for (int i = 0; i < 6; i++) {
        if (db & mask) {
            DATA (1);
        } else {
            DATA (0);
        }
        mask >>= 1;
        __NOP();
        __NOP();
        CLK (1);
        Delay_Us (1);
        CLK (0);
    }
    if (idx == 1) {
        LE1 (1);
        Delay_Us (1);
        LE1 (0);
    } else {
        LE2 (1);
        Delay_Us (1);
        LE2 (0);
    }
}